#include <iostream>
#include <unordered_set>
using namespace std;

// 已知
long long n, a[100];
// 未知
long long tmp, b[100];
unordered_set<long long> st;
void input()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
}

void dfs(int idx, int x)
{
    for (int i = 0; i <= x; ++i)
    {
        tmp = tmp ^ b[i];     // tmp异或成旧的b[i]
        b[i] = b[i] + a[idx]; // b[i]加上选中的数
        tmp = tmp ^ b[i];     // 把加和后的异或进去
        if (idx == n - 1) st.insert(tmp); // 如果选到了最后一个数，就说明这个数列已经选完了
        else if (i < x) dfs(idx + 1, x); // 如果i小于x，说明还有空位，递归选下一个人
        else dfs(idx + 1, x + 1); // 如果i等于x，说明没有空位了，递归选下一个人，同时x+1
        // 回溯撤销选择
        tmp = tmp ^ b[i];
        b[i] = b[i] - a[idx];
        tmp = tmp ^ b[i];
    }
}

int main()
{
    input();
    dfs(0, 0);
    cout << st.size() << endl;
    return 0;
}